package com.itany.corejava.code16_反射;

import java.lang.annotation.*;

/**
 * @author Miss Chen
 * @version 1.0
 * @date 2024年08月12日15:24
 */

// @Target注解的值如果只有一个，直接指定一个
// @Target(value= ElementType.FIELD)
// @Target注解的值如果有多个，通过{}来指定多个
//所有注解中，如果注解值有且仅有value，那么value可以省略，直接写属性值
// @Target(value={ ElementType.FIELD,ElementType.METHOD,ElementType.TYPE})
@Target({ ElementType.FIELD,ElementType.METHOD,ElementType.TYPE})
@Retention(value = RetentionPolicy.RUNTIME)
@Documented
@Inherited
public @interface SomeAnnotation {

    //定义注解属性时候，每一个属性对应一个抽象方法
    // 虽然是一个抽象方法，但是将它看成是属性的作用
    // 可以使用default为属性设置默认值
    // 当使用该注解时，如果没有为指定属性赋值，则使用默认值
    // 如果所有属性都有默认值，在使用注解到时候可以不指定任何属性
    // 如果有任意一个属性没有设置默认值，在使用时必须指定对应属性的值
    String name() default "admin";
    String[] value() default  {"aa","bb","cc"};
    int age() default 30;
}
